#pragma once
#include <iostream>
#include <sys/epoll.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <unordered_map>
#include <string>

class EchoServer {
public:
    EchoServer(int port, int maxEchoCount = 3); // 新增：最大交互次数
    ~EchoServer();
    bool init();
    void start();

private:
    void setNonBlocking(int fd);
    int sendAll(int fd, const char* buffer, int len);
    int listenFd_;
    int epollFd_;
    int port_;
    int totalConnections_;
    const int maxEchoCount_; // 每个连接最大交互次数
    // 新增：跟踪每个连接的交互次数 (fd -> 已完成次数)
    std::unordered_map<int, int> echoCount_;
    static const int MAX_EVENTS = 1024;
    static const int BUFFER_SIZE = 512;
    std::unordered_map<int, std::string> pendingData_;
};
